package com.haojin.java3;

import org.junit.Test;

import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * @author .29.
 * @create 2022-04-21 22:18
 */
/*
测试Stream的终止操作
 */
public class StreamAPI02 {
    //1.匹配与查找
    @Test
    public void test1(){
//allMatch(Predicate p):检查是否匹配所有元素。
//anyMatch(Predicate p):检查是否至少匹配一个元素。
//noneMatch(Predicate p):检查是否没有匹配的元素
//findFirst():返回第一个元素
//findAny():返回当前流中的任意元素
//count():返回流中元素的总个数
//max(Comparator c):返回流中最大值
//min(Comparator c):返回流中最小值
//forEach(Consumer c):内部迭代
    }

    //2.归约
    @Test
    public void test2(){
//reduce(T iden,BinaryOperator b):可以将流中元素反复结合起来，得到一个值。返回T
        List<Integer> list1 = Arrays.asList(12,2,44,456,1,2,33,12);
        Integer reduce = list1.stream().reduce(0, Integer::sum);
        System.out.println(reduce);
//reduce(BinaryOperator b):可以将流中元素反复结合起来，得到一个值。返回Optional<T>
        List<Integer> list2 = Arrays.asList(12,2,44,456,1,2,33,12);
//        Optional<Integer> reduce1 = list2.stream().reduce(Integer::sum);//方法引用
        Optional<Integer> reduce1 = list2.stream().reduce((s1,s2) -> s1+s2);//Lambda表达式
        System.out.println(reduce);
    }

    //收集
    @Test
    public void test3(){
 /*
collect(Collector c):将流转换为其他形式。接收一个Collector接口的实现，用于给Stream中元素做汇总的方法
   Collector接口中方法的实现决定了如何对流执行收集的操作（如收集到List、Set、Map）。
   另外，Collectors实现类提供了很多静态方法，可以方便地创建常见收集器实例
*///         collect(Collector c):将流转换为其他形式。
        List<Integer> list2 = Arrays.asList(12,2,44,456,1,2,33,12);
        Set<Integer> collect = list2.stream().collect(Collectors.toSet());
        collect.forEach(System.out::println);

    }
}
